#pragma once

#include <cstdint>
#include <type_traits>

template <typename T> struct NumberType : public std::false_type {};

template <> struct NumberType<uint8_t> : public std::true_type {};

template <> struct NumberType<uint16_t> : public std::true_type {};

template <> struct NumberType<uint32_t> : public std::true_type {};

template <> struct NumberType<uint64_t> : public std::true_type {};

template <> struct NumberType<int8_t> : public std::true_type {};

template <> struct NumberType<int16_t> : public std::true_type {};

template <> struct NumberType<int32_t> : public std::true_type {};

template <> struct NumberType<int64_t> : public std::true_type {};

template <typename T> inline static constexpr auto IsNumberTypeValue = NumberType<T>::value;